﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Windows.Forms;
using ComunesMGI.DataTypes;
using ClienteWinMGI.Reportes;

namespace ClienteWinMGI.Presentacion
{
    public partial class FormReportes : Form
    {
        object _reporteSimple = null;
        object _reporteDetallado = null;
        //DataSetIncidentes _reportDataSourceIncidentesCerrados = null;
        Boolean _reporteSimplificado = false;

        public FormReportes()
        {
            InitializeComponent();
            customizeToolbar();
            crystalReportViewer1.ShowGroupTreeButton = false;
            ((ToolStrip)crystalReportViewer1.Controls[3]).Name = "toolbox";
        }

        public FormReportes(List<DataIncidenteReporte> dir, DateTime fechaDesde, DateTime fechaHasta)
        {
            InitializeComponent();
            customizeToolbar();
            crystalReportViewer1.ShowGroupTreeButton = false;
            ((ToolStrip)crystalReportViewer1.Controls[3]).Name = "toolbox";
        }

        public void SetReporteCerradosPeriodos() 
        {
            _reporteSimple = (ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodoSimplificado)new ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodoSimplificado();
            _reporteDetallado = (ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodo)new ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodo();
            this.crystalReportViewer1.ReportSource = _reporteDetallado;
        }

        public void SetReporteAsignadosPeriodos()
        {
            _reporteSimple = (ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodoSimplificado)new ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodoSimplificado();
            _reporteDetallado = (ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodo)new ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodo();
            this.crystalReportViewer1.ReportSource = _reporteDetallado;
            //this.crystalReportViewer1.ReportSource = (ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodo)new ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodo();
        }

        public void SetReporteCreadosPeriodos()
        {
            _reporteSimple = (ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodoSimplificado)new ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodoSimplificado();
            _reporteDetallado = (ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodo)new ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodo();
            this.crystalReportViewer1.ReportSource = _reporteDetallado;
            //this.crystalReportViewer1.ReportSource = (ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodo)new ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodo();
        }

        public void SetReporteWPCreadosPeriodos()
        {
            _reporteSimple = (ClienteWinMGI.Reportes.ReporteWorkPackagesCreadosSimplificado)new ClienteWinMGI.Reportes.ReporteWorkPackagesCreadosSimplificado();
            _reporteDetallado = (ClienteWinMGI.Reportes.ReporteWorkPackagesCreados)new ClienteWinMGI.Reportes.ReporteWorkPackagesCreados();
            this.crystalReportViewer1.ReportSource = _reporteDetallado;
            //this.crystalReportViewer1.ReportSource = (ClienteWinMGI.Reportes.ReporteWorkPackagesCreados)new ClienteWinMGI.Reportes.ReporteWorkPackagesCreados();
        }

        public void SetDataSourceReporte(List<DataIncidenteReporte> ldir, DateTime fechaDesde, DateTime fechaHasta)
        {
            DataSetIncidentes ds = new DataSetIncidentes();
            foreach (DataIncidenteReporte dir in ldir) 
            {
                ds.DataIncidente.AddDataIncidenteRow(dir.IdIncidente, dir.Titulo, dir.Descripcion, dir.Responsable, dir.Cliente, dir.Sistema, fechaDesde, fechaHasta, dir.FechaPropuesto, dir.FechaCierre,dir.Url,dir.FechaEstimadaFin,dir.EsfuerzoTotal,dir.WP);
            }
            //_reportDataSourceIncidentesCerrados = ds;
            //this.ds = ds;
            ((ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodoSimplificado)_reporteSimple).SetDataSource(ds);
            ((ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodo)_reporteDetallado).SetDataSource(ds);
            //((ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodo)this.crystalReportViewer1.ReportSource).SetDataSource(ds);
        }

        public void SetDataSourceReporteIncidentesAsignados(List<DataIncidenteReporte> ldir, DateTime fechaDesde, DateTime fechaHasta)
        {
            DataSetIncidentesAsignados ds = new DataSetIncidentesAsignados();
            foreach (DataIncidenteReporte dir in ldir)
            {
                ds.DataIncidenteAsignado.AddDataIncidenteAsignadoRow(dir.IdIncidente, dir.Titulo, dir.Descripcion, dir.Responsable, dir.Cliente, dir.Sistema, fechaDesde, fechaHasta, dir.FechaPropuesto, dir.FechaCierre,dir.Estado,dir.Url,dir.EsfuerzoTotal,dir.EsfuerzoRestante);
            }
            //_reportDataSource = ds;
            ((ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodoSimplificado)_reporteSimple).SetDataSource(ds);
            ((ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodo)_reporteDetallado).SetDataSource(ds);
            //((ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodo)this.crystalReportViewer1.ReportSource).SetDataSource(ds);
        }

        public void SetDataSourceReporteIncidentesCreados(List<DataIncidenteReporte> ldir, DateTime fechaDesde, DateTime fechaHasta)
        {
            DataSetIncidentesCreados ds = new DataSetIncidentesCreados();
            foreach (DataIncidenteReporte dir in ldir)
            {
                ds.DataIncidenteCreado.AddDataIncidenteCreadoRow(dir.IdIncidente, dir.Titulo, dir.Descripcion, dir.Responsable, dir.Cliente, dir.Sistema, fechaDesde, fechaHasta, dir.FechaPropuesto, dir.FechaCierre, dir.WP,dir.Url, dir.EsfuerzoTotal, dir.FechaEstimadaFin);
            }
            //_reportDataSource = ds;
            ((ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodoSimplificado)_reporteSimple).SetDataSource(ds);
            ((ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodo)_reporteDetallado).SetDataSource(ds);
            //((ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodo)this.crystalReportViewer1.ReportSource).SetDataSource(ds);
        }

        public void SetDataSourceReporteWPCreados(List<DataWPReporte> ldir, DateTime fechaDesde, DateTime fechaHasta)
        {
            DataSetWorkPackagesAsignados ds = new DataSetWorkPackagesAsignados();
            foreach (DataWPReporte dir in ldir)
            {
                DateTime fechaFinWP = ComunesMGI.Constantes.ConstantesMGI.FechaVacia;
                if (dir.FechaFin != ComunesMGI.Constantes.ConstantesMGI.FechaVacia)
                {
                    fechaFinWP = dir.FechaFin;
                }
                string fechaFinCalculadaWP = "El Work Package no ha sido cerrado.";
                if (dir.FechaEstimadaEntrega != ComunesMGI.Constantes.ConstantesMGI.FechaVacia)
                {
                    //fechaFinCalculadaWP = dir.FechaFin.ToString("dddd, dd de MMMM de yyyy");
                    fechaFinCalculadaWP = dir.FechaEstimadaEntrega.Day + " de " + dir.FechaEstimadaEntrega.ToString("MMMM") + " de " + dir.FechaEstimadaEntrega.Year;
                }
                ds.DataWorkPackage.AddDataWorkPackageRow(dir.Id, dir.Nombre, dir.FechaInicio.Date, fechaFinWP.Date, fechaDesde.Date, fechaHasta.Date, dir.Estado.Estado, dir.Nomsistema, dir.NomCliente, fechaFinCalculadaWP);
            }
            //_reportDataSource = ds;
            ((ClienteWinMGI.Reportes.ReporteWorkPackagesCreadosSimplificado)_reporteSimple).SetDataSource(ds);
            ((ClienteWinMGI.Reportes.ReporteWorkPackagesCreados)_reporteDetallado).SetDataSource(ds);
            //((ClienteWinMGI.Reportes.ReporteWorkPackagesCreados)this.crystalReportViewer1.ReportSource).SetDataSource(ds);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (_reporteSimplificado == false)
            {
               if (typeof(ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodo) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteSimple;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               if (typeof(ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodo) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteSimple;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               if (typeof(ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodo) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteSimple;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               if (typeof(ClienteWinMGI.Reportes.ReporteWorkPackagesCreados) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteSimple;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               ChangeBtnSimplificarText("Detallar Reporte", _reporteSimplificado);
            }
            else{
               if (typeof(ClienteWinMGI.Reportes.ReporteIncidentesCerradosPeriodoSimplificado) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteDetallado;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               if (typeof(ClienteWinMGI.Reportes.ReporteIncidentesAsignadosPeriodoSimplificado) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteDetallado;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               if (typeof(ClienteWinMGI.Reportes.ReporteIncidentesCreadosPeriodoSimplificado) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteDetallado;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               if (typeof(ClienteWinMGI.Reportes.ReporteWorkPackagesCreadosSimplificado) == this.crystalReportViewer1.ReportSource.GetType())
               {
                   this.crystalReportViewer1.SuspendLayout();
                   this.crystalReportViewer1.ReportSource = _reporteDetallado;
                   this.crystalReportViewer1.ResumeLayout();
                   this.crystalReportViewer1.Refresh();
               }
               ChangeBtnSimplificarText("Simplificar Reporte", _reporteSimplificado);
            }
            _reporteSimplificado = !_reporteSimplificado;
        }

        private void customizeToolbar()
        {
            Control ts = crystalReportViewer1.Controls[3];
            //Control ts = crystalReportViewer1.Controls["toolbox"];
            ToolStripButton BtnSimplificar = new ToolStripButton();
            BtnSimplificar.Name = "BtnSimplificar";
            BtnSimplificar.Text = "Simplificar Reporte";
            BtnSimplificar.Image = global::ClienteWinMGI.Properties.Resources.table_row_delete;
            BtnSimplificar.Tag = "Simplificar/Detallar el Reporte";
            BtnSimplificar.Click += button1_Click;
            ToolStripSeparator sep = new ToolStripSeparator();
            ((ToolStrip)ts).Items.Add(sep);
            ((ToolStrip)ts).Items.Add(BtnSimplificar);
        }

        void ChangeBtnSimplificarText(string nuevotexto, bool reporteSimplificado)
        {
            Control ts = crystalReportViewer1.Controls[3];
            //Control ts = crystalReportViewer1.Controls["toolbox"];
            ((ToolStrip)ts).Items["BtnSimplificar"].Text = nuevotexto;
            if (reporteSimplificado)
                ((ToolStrip)ts).Items["BtnSimplificar"].Image = global::ClienteWinMGI.Properties.Resources.table_row_delete;
            else
                ((ToolStrip)ts).Items["BtnSimplificar"].Image = global::ClienteWinMGI.Properties.Resources.table_row_insert;
            ((ToolStrip)ts).Update();

        }

    }
}
